home *** CD-ROM | disk | FTP | other *** search
-
- /////////////////////\\\\\\\\\\\\\\\\\\\\\\\
- Dokumentation zur FIDO Unit FTIMER
- \\\\\\\\\\\\\\\\\\\\\///////////////////////
-
- RELEASE 1.02
- ^^^^^^^^^^^^
-
- =========================================================================
- Autor: Peter Holschbach, 2:2450/660.3 @ FidoNet, Remscheid, 26.06.1994
- =========================================================================
-
- 1. Timer :
- -----------
-
- Die Unit FTIMER.PAS stellt Funktionen und Prozeduren zur
- Zeitmessung bis max. 24h zu Verfügung. Bis zu 10 unabhängige
- Timer können mit dieser Unit verwaltet werden (Auflösung
- ca. 55ms).
- Zusätzlich könne 10 weitere Timer mit einer Auflösung von
- einer Mikrosekunde und einer max. Laufzeit von 71 Minuten
- verwaltet werden.
-
- Im Laufe der Zeit traten mit dieser Unit viele Probleme auf.
- An dieser Stelle möchte ich kurz meine Erkenntnisse
- zusammenstellen.
-
- 1. Unter Windows kommen bei den schnellen Timer immer wieder
- negative Zeiten heraus, weil scheinbar Interrupts
- verlohren gehen.
- 2. Um kompatibel zu sein, habe ich bei den langsamen Timern
- zum Lesen der Zeit die BIOS-Funktion 1AH verwendet.
- Wenn man diese sehr oft aufruft, zählt der PC das
- Datum nichtmehr weiter. Die Ursache ist mir z.Zt.
- nicht klar. Die Unit kann durch den Compiler-Switch
- "$DEFINE UseBios" auf diese Betriebsart umgestellt werden.
- Ist "UseBios" abgeschaltet, wird direkt auf die
- Daten des System-Tickers zugegriffen.
-
- Dies ist eine Low Level Unit. Sie benötigt keinerlei Routinen
- anderer Units, mit Ausnahme der in Turbo Pascals (6.0 oder
- höher) Unit-Library TURBO.TPL enhaltenen Standard-Units.
-
-
-
- 2. Kurzbeschreibung:
- --------------------
-
- DeInstallFastTimer ... macht die Änderungen rückgängig, die
- an der Programmierung des Zählerbausteins
- vorgenommen werden mußte.
- FreeFastHandles ...... zum internen Gebrauch der Unit. Flags zum
- Markieren eines belegten hochauflösenden Timers.
- FreeHandles .......... zum internen Gebrauch der Unit. Flags zum
- Markieren eines belegten Timers.
- GetFastTimerHandle ... wie GetTimerHandle für hochauflösende
- Timer.
- GetTimerHandle ....... liefert die Nummer eines freien Handle
- zurück. Sind alle Handle Belegt, wird eine
- Null zurückgegeben. Der Timer ist bis zur
- Freigabe reserviert.
- GetFastTimeSec ....... bibt die Zeit in Sekunden zurück, die seit
- dem Start des Timers vergangen ist.
- GetTimeSec ........... gibt die Zeit in Sekunden zurück, die seit
- dem Start des Timers vergangen ist.
- GetTimeTicks ......... gibt die Anzahl der Timerticks zurück, die
- seit dem Start des Timers mit StartTimer
- vergangen ist.
- InstallFastTimer ..... Bereitet den Timerbaustein für die
- Zeitmessung vor und bestimmt die
- Verzugszeiten der Funktionen die zur
- Messung notwendig sind.
- ReadFastTimer ........ gibt den aktuellen Wert des Timerbausteins
- sowie das LSB des Systemtickers zurück.
- Diese Funktion wird von anderen Funktionen
- verwendet.
- StartFastTimer ....... startet die Zeitmessung eines hochauflösenden
- Timers.
- StartTimer ........... startet die Zeitmessung eines Timers. Es
- wird nicht geprüft ob der Handle belegt ist.
- StartFastTimeField ... zum internen Gebrauch der Unit. Enthält die
- Startzeiten aller hochauflösenden Timer.
- StartTimeField ....... zum internen Gebrauch der Unit. Enthält die
- Startzeiten aller Timer.
- StopTimer ............ der Timer wird angehalten. Eine Abfrage des
- Timers liefert jetzt immer den größtmöglichen
- Wert zurück.
- TicksPerSecond ....... Anzahl der Systemticks pro Sekunde als REAL
- Konstante.
- TimeAccessRec ........ Datenstruktur fü den internen Gebrauch.
- Ermöglicht den Zugriff auf einen LongInt Typ
- als LongInt und zwei Word Variablen.
- TimerHandle .......... wird immer beim Aufruf von StartTimer auf
- die aktuelle Nummer des Handle gesetzt.
- UnGetFastTimerHandle . wie "UnGetTimerHandle" für die
- hochauflösenden Timer.
- UnGetTimerHandle ..... gibt den zum Handle korrospondierenden
- Timer wieder frei. War der Handle unbelegt,
- liefert die Funktion FALSE als Fehlermeldung
- zurück.
-
- 3. Detaillierte Beschreibung:
- -----------------------------
-
- ===============================================================
- DeInstallFastTimer
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... Der Timerbaustein wird wieder mit seinen
- Standardparametern programmiert
-
- DEKLARATION ... Procedure DeInstallFastTimer
-
- PARAMETER ... keine
-
- ERGEBNIS ... ein Zugriff auf hochauflösende Timer
- führt zu unsinnigen Werten.
-
- ===============================================================
- GetFastTimerHandle
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... belegt den nächsten freien Timer in der Liste
- der hochauflösenden Timer.
-
- DEKLARATION ... function GetFastTimerHandle : Word
-
- PARAMETER ... keine
-
- ERGEBNIS ... eine Variable des Typs WORD, die bei Werten
- größer Null die Nummer des Handle darstellt,
- bzw. bei Null eine Fehlermeldung (kein freier
- Timer vorhanden).
-
- ===============================================================
- GetTimerHandle
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... belegt den nächsten freien Timer in der Liste.
-
- DEKLARATION ... function GetTimerHandle : Word
-
- PARAMETER ... keine
-
- ERGEBNIS ... eine Variable des Typs WORD, die bei Werten
- größer Null die Nummer des Handle darstellt,
- bzw. bei Null eine Fehlermeldung (kein freier
- Timer vorhanden).
-
- ===============================================================
- GetTimerTicks
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... ermittelt die Laufzeit de Timers seit
- StartTimer
-
- DEKLARATION ... Function GetTimerTicks (Handle :Word):LongInt
-
- PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
- reserviert wurde.
-
- ERGEBNIS ... die Zeit seit Start des Timers in Ticks
- (ca. 18,2 Ticks/sec)
-
-
- ===============================================================
- GetFastTimeSec
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... ermittelt die Laufzeit des hochauflösenden
- Timers in Sekunden
-
- DEKLARATION ... Function GetFastTimerSec (Handle :Word):Real
-
- PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
- reserviert wurde.
-
- ERGEBNIS ... die Laufzeit des Timers in Sekunden.
-
- ===============================================================
- GetTimeSec
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... ermittelt die Laufzeit des Timers in Sekunden
-
- DEKLARATION ... Function GetTimerSec (Handle :Word):LongInt
-
- PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
- reserviert wurde.
-
- ERGEBNIS ... die Laufzeit des Timers in Sekunden.
-
-
- ===============================================================
- InstallFastTimer
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... Der Timerbaustein des PC wird umprogrammiert
- um Messungen mit Mikrosekundenauflösung
- zu erlauben. Die Uhr des PC wird hierdurch
- kaum (max. 65ms) beeinflußt.
-
- DEKLARATION ... Procedure InstallFastTimer
-
- PARAMETER ... -
-
- ERGEBNIS ... Alle Funktionen für hochauflösenden Timer
- können jetzt erst verwendet werden.
-
- ===============================================================
- StartFastTimer
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... der hochauflösende Timer wird gestartet und
- die aktuelle Nummer des Handle in
- FastTimerHandle abgelegt.
-
- DEKLARATION ... Procedure StartFastTimer (Handle : Word)
-
- PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
- reserviert wurde.
-
- ERGEBNIS ... die Handlenummer in FastTimerHandle
-
- ===============================================================
- StartTimer
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... der Timer wird gestartet und die aktuelle
- Nummer des Handle in TimerHandle abgelegt.
- Sonderfunktion bei einer ungültigen Handle-
- nummer (= 0) wird ein Handle über die
- Funktion GetHandle reserviert.
-
- DEKLARATION ... Procedure StartTimer (Handle : Word)
-
- PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
- reserviert wurde. Oder 0 um einen Handle
- zu reservieren.
-
- ERGEBNIS ... die Handlenummer in TimerHandle
-
-
-
- ===============================================================
- StopTimer
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... der Timer bekommt eine spezielle Kennung.
- Bei der Abfrage mit GetTimexxx wird immer
- der größten Wert zurückgeliefert
-
- DEKLARATION ... Procedure StopTimer (Handle : Word);
-
- PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
- reserviert wurde.
-
- ERGEBNIS ... -
-
-
- ===============================================================
- UnGetFastTimerHandle
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... gibt den Handle wider frei
-
- DEKLARATION ... function UnGetFastTimerHandle (Handle : Word)
- : Boolean
-
- PARAMETER ... die Nummer des Handle
-
- ERGEBNIS ... TRUE wenn der Handle belegt war.
-
- ===============================================================
- UnGetTimerHandle
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... gibt den Handle wider frei
-
- DEKLARATION ... function UnGetTimerHandle (Handle : Word)
- : Boolean
-
- PARAMETER ... die Nummer des Handle
-
- ERGEBNIS ... TRUE wenn der Handle belegt war.
-
-
-
- 4. Beispiele:
- -------------
-
- ===============================================================
- Gesamtbeispiel für Timer
- ---------------------------------------------------------------
-
- Var MyTimerHandle1,
- MyTimerHandle2 : Word;
-
- Begin
- MyTimerHandle1 := GetTimerHandle;
- MyTimerHandle2 := GetTimerHandle;
- If (MyTimerHandle1 = 0) OR (MyTimerHandle2 = 0) then Begin
- Writeln ('Kein Timer mehr frei ! ');
- Halt;
- End;
- StartTimer(MyTimerHandle1);
- Delay (1000);
- StartTimer (MyTimerHandle2);
- Delay (1000);
- Writeln (GetTimeSec (MyTimerHandle1)); {Ergebnis: 2 }
- Delay (1000);
- Writeln (GetTimeSec (MyTimerHandle2)); {Ergebnis: 2 }
- If Not UnGetTimerHandle (MyTimerHandle1) OR
- Not UnGetTimerHandle (MyTimerHandle2) Then Begin
- Writeln ('Fehler bei der Freigabe !');
- End;
- End.
-
- ---------------------------------------------------------------
-
- Eine Vereinfachung für den Umgang mit nur einem Timer stellt
- die Sonderfunktion von StartTimer dar, einen Handle reservieren
- zu können:
-
- StartTimer (0); {Handle reservieren u. Timer starten }
- Delay (1000);
- Writeln (GetTimeSec (TimerHandle)); {Ergebnis: 1}
- UnGetTimerHandle (TimerHandle);
-
- ===============================================================
- Kurzes Beispiel für die hochauflösenden Timer
- ---------------------------------------------------------------
- Var MyTimerHandle1 : Word
-
-
- Begin
-
- InstallFastTimer;
- MyTimerHandle1 := GetFastTimerHandle;
- If (MyTimerHandle1 = 0) then Begin
- Writeln ('Kein Timer mehr frei ! ');
- Halt;
- End;
- StartFastTimer(MyTimerHandle1);
- Delay (1);
- Writeln (GetFastTimeSec (MyTimerHandle1)); {Ergebnis: 0.001 }
- DeInstallFastTimer;
- End.
-
- ---------------------------------------------------------------
-
- 5. History:
- -----------
-
- Neuerungen nach Release ...
- ---------------------------
- 1.01
- ----
- - StartTimer mit erweitertet Funktionalität.
-
- 1.02
- ----
- - Kosmetische Änderungen:
- - die Konstante "TicksPerSecond" ist global
- verfügbar
- - Neu:
- - 10 Timer mit einer hohen Auflösung (1 Mikrosekunde)
- und maximal 71 Minuten Laufzeit können verwaltet
- werden.
-
- ==========================================================================
-
- /////////////////////\\\\\\\\\\\\\\\\\\\\\\\
- Ende der Dokumentation zur FIDO Unit FTIMER
- \\\\\\\\\\\\\\\\\\\\\///////////////////////
-